using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;

namespace RC.ControlAcceso.BaseDatos
{
    public class CASectorBD : TablaBase
    {
        #region Variables
        private int mIdSector;
        private string mDescripcion;
        private int _idGerencia;
        private bool _estaActivo;
        private int mLegajoAutorizante;
        protected string SPRecuperarPorIDyAutorizante = "";
        protected string SPRecuperarPersonalPorSector = "";
        protected string SPObtenerTodos = "";
        #endregion

        #region Propiedades
        public int IdSector
        {
            get { return mIdSector; }
            set { mIdSector = value; }
        }
        public string Descripcion
        {
            get { return mDescripcion; }
            set { mDescripcion = value; }
        }
        public int LegajoAutorizante
        {
            get { return mLegajoAutorizante; }
            set { mLegajoAutorizante = value; }
        }
        public int IdGerencia
        {
            get { return _idGerencia; }
            set { _idGerencia = value; }
        }
        public bool EstaActivo
        {
            get { return _estaActivo; }
            set { _estaActivo = value; }
        }
        #endregion

        #region Constructores
        public CASectorBD()
        {
            ValoresIniciales();
        }
        private void ValoresIniciales()
        {
            mIdSector = -1;
        }
        public CASectorBD(int pIdSector)
        {
            ValoresIniciales();
            mIdSector = pIdSector;
            Editar();
        }
        #endregion

        #region Funciones
        protected override void AsignarSP()
        {
            SPInsertar = "CASectoresInsertar";
            SPSeleccionar = "CASectoresSeleccionar";
            SPActualizar = "CASectoresActualizar";
            SPEditar = "CASectoresEditar";
            SPRecuperar = "CASectoresRecuperar";
            SPRecuperarPorIDyAutorizante = "CASectoresRecuperarPorIdyAutorizante";
            SPRecuperarPersonalPorSector = "CASectoresRecuperarPersonalPorSector";
            SPObtenerTodos = "CASectoresObtenerTodos";
        }
        protected override System.Data.SqlClient.SqlParameter[] AsignaParametros(string pNombreSP)
        {
            SqlParameter[] Param;
            SqlParameter Parametro;
            switch (pNombreSP)
            {
                case "CASectoresRecuperarPersonalPorSector":
                    Param = new SqlParameter[1];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdSectores";
                    Parametro.SqlDbType = SqlDbType.VarChar;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mIdSector;
                    Param[0] = Parametro;
                    return Param;
                case "CASectoresRecuperarPorIdyAutorizante":
                    Param = new SqlParameter[2];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdSectores";
                    Parametro.SqlDbType = SqlDbType.VarChar;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mIdSector;
                    Param[0] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@LegajoAutorizante";
                    Parametro.SqlDbType = SqlDbType.VarChar;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mLegajoAutorizante;
                    Param[1] = Parametro;

                    return Param;
                case "CASectoresInsertar":
                    Param = new SqlParameter[4];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdSectores";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mIdSector;
                    Param[0] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdGerencia";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdGerencia;
                    Param[1] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@Descripcion";
                    Parametro.SqlDbType = SqlDbType.VarChar;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mDescripcion;
                    Param[2] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@EstaActivo";
                    Parametro.SqlDbType = SqlDbType.Bit;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = EstaActivo;
                    Param[3] = Parametro;

                    return Param;
                case "CASectoresActualizar":
                    Param = new SqlParameter[4];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdSectores";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mIdSector;
                    Param[0] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdGerencia";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = IdGerencia;
                    Param[1] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@Descripcion";
                    Parametro.SqlDbType = SqlDbType.VarChar;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mDescripcion;
                    Param[2] = Parametro;

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@EstaActivo";
                    Parametro.SqlDbType = SqlDbType.Bit;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = EstaActivo;
                    Param[3] = Parametro;

                    return Param;

                case "CASectoresEditar":
                    Param = new SqlParameter[1];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdSectores";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mIdSector;
                    Param[0] = Parametro;

                    return Param;

                case "CASectoresRecuperar":
                    Param = new SqlParameter[1];

                    Parametro = new SqlParameter();
                    Parametro.ParameterName = "@IdSector";
                    Parametro.SqlDbType = SqlDbType.Int;
                    Parametro.Direction = ParameterDirection.Input;
                    Parametro.Value = mIdSector;
                    Param[0] = Parametro;

                    return Param;

                default: return null;
            }
        }
        protected override void AsignarDatos(System.Data.SqlClient.SqlDataReader pDatos)
        {
            if (!pDatos.IsDBNull(pDatos.GetOrdinal("IdSectores")))
                mIdSector = pDatos.GetInt32(pDatos.GetOrdinal("IdSectores"));
            if (!pDatos.IsDBNull(pDatos.GetOrdinal("Descripcion")))
                mDescripcion = pDatos.GetString(pDatos.GetOrdinal("Descripcion")).Trim();
            if (!pDatos.IsDBNull(pDatos.GetOrdinal("IdGerencia")))
                IdGerencia = pDatos.GetInt32(pDatos.GetOrdinal("IdGerencia"));
            if (!pDatos.IsDBNull(pDatos.GetOrdinal("EstaActivo")))
                EstaActivo = pDatos.GetBoolean(pDatos.GetOrdinal("EstaActivo"));
        }
        public DataSet RecuperarPorIDyAutorizante()
        {
            try
            {
                Conectar();
                AsignarSP();
                SqlParameter[] Parametros = AsignaParametros(SPRecuperarPorIDyAutorizante);
                DataSet ds = SqlHelper.ExecuteDataset(miConn, CommandType.StoredProcedure, SPRecuperarPorIDyAutorizante, Parametros);
                return ds;
            }
            catch (Exception ex)
            {
                throw new Exception("Error al recuperar desde la base de datos. " + ex.Message);
            }
            finally
            {
                if (miConn != null && miConn.State == ConnectionState.Open)
                    miConn.Close();
                miConn.Dispose();
            }
        }
        public DataSet RecuperarPersonalPorSector()
        {
            try
            {
                Conectar();
                AsignarSP();
                SqlParameter[] Parametros = AsignaParametros(SPRecuperarPersonalPorSector);
                DataSet ds = SqlHelper.ExecuteDataset(miConn, CommandType.StoredProcedure, SPRecuperarPersonalPorSector, Parametros);
                return ds;
            }
            catch (Exception ex)
            {
                throw new Exception("Error al recuperar desde la base de datos. " + ex.Message);
            }
            finally
            {
                if (miConn != null && miConn.State == ConnectionState.Open)
                    miConn.Close();
                miConn.Dispose();
            }
        }
        public DataSet ObtenerTodos()
        {
            try
            {
                Conectar();
                AsignarSP();
                Parametros = AsignaParametros(SPObtenerTodos);
                DataSet ds = SqlHelper.ExecuteDataset(miConn, CommandType.StoredProcedure, SPObtenerTodos, Parametros);
                return ds;
            }
            catch (Exception ex)
            {
                if (miTrans != null)
                    miTrans.Rollback();
                throw new Exception("Error al recuperar de la base de datos. " + ex.Message);
            }
            finally
            {
                if (miConn != null && miConn.State == ConnectionState.Open)
                    miConn.Close();
                miConn.Dispose();
            }
        }
        #endregion
    }
}